package org.marketlive.entity.attributes;

/*
(C) Copyright MarketLive. 2006. All rights reserved.
MarketLive is a trademark of MarketLive, Inc.
Warning: This computer program is protected by copyright law and international treaties.
Unauthorized reproduction or distribution of this program, or any portion of it, may result
in severe civil and criminal penalties, and will be prosecuted to the maximum extent
possible under the law.
*/

/**
 * Represents a category in which attributes can be arranged.
 */
public interface IAttributeCategory {
    /**
     * Returns the identifier of this category.
     *
     * @return the identifier of this category
     */
    Integer getID();

    /**
     * Sets the identifier of this category.
     *
     * @param id the identifier of this category
     */
    void setID(Integer id);

    /**
     * Returns the description of this category.
     * @return the description of this category
     */
    String getDescription();

    /**
     * Sets the description of this category.
     * @param description the description of this category
     */
    void setDescription(String description);

    /**
     * Returns the type of attributes in this category.
     * Usually one of <code>Product</code>, <code>Sku</code>, or
     * <code>Category/PGroup</code>.
     * For example, a category with level type <code>Product</code> holds attributes
     * that apply to products. The returned string is case-insensitive.
     *
     * @return the type of attributes in this category
     */
    String getLevelType();

    /**
     * Sets the type of attributes in this category.
     * Usually one of <code>Product</code>, <code>Sku</code>, or
     * <code>Category/PGroup</code>.
     * For example, a category with level type <code>Product</code> holds attributes
     * that apply to products. The returned string is case-insensitive.
     *
     * @param levelType the type of attributes in this category
     */
    void setLevelType(String levelType);

    /**
     * Returns the name of this category.
     * @return the name of this category
     */
    String getName();

    /**
     * Sets the name of this category.
     * @param name the name of this category
     */
    void setName(String name);

    /**
     * Returns the code of this category.
     * Note that this is not the merchant-defined unique identifier
     * of an <code>IAttributeCategory</code>. This is a different
     * kind of code.
     *
     * @return the code of this category
     */
    String getCode();

    /**
     * Sets the code of this category.
     * Note that this is not the merchant-defined unique identifier
     * of an <code>IAttributeCategory</code>. This is a different
     * kind of code.
     *
     * @param code the code of this category
     */
    void setCode(String code);

}
